home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / qb2 / pro15 / arty.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-08-20  |  5.0 KB  |  285 lines

  1. {
  2.  ******************************************************************************
  3.  * ARTY - Symetrical line drawing demo.                          *
  4.  *                                          *
  5.  * Written for GRAFIX by:  Joseph A. Albrecht                      *
  6.  *                                          *
  7.  * Press F1 to pause program                              *
  8.  * Press F2 to redraw image                              *
  9.  * Press F10 to toggle between 320 and 640 graphics modes              *
  10.  * Press ESC to exit program                              *
  11.  ******************************************************************************
  12. }
  13.  
  14. PROGRAM Arty;
  15.  
  16. USES
  17.   Crt,
  18.   Grafix;
  19.  
  20. CONST
  21.   Lines = 100;
  22.   MaxColor = 15;
  23.   MaxY = 199;
  24.  
  25. VAR
  26.   L, X1, Y1, X2, Y2, MaxX, ColorCount, IncrementCount, Graphics: INTEGER;
  27.   C1, C2, C3, C4, DeltaX1, DeltaY1, DeltaX2, DeltaY2, StartX, StartY: INTEGER;
  28.   MaxDelta: INTEGER;
  29.   Tandy11, EndProgram, Loop: BOOLEAN;
  30.   LX1: ARRAY [0..Lines] OF INTEGER;
  31.   LY1: ARRAY [0..Lines] OF INTEGER;
  32.   LX2: ARRAY [0..Lines] OF INTEGER;
  33.   LY2: ARRAY [0..Lines] OF INTEGER;
  34.  
  35. PROCEDURE SelectNewColors;
  36.  
  37. BEGIN
  38.  
  39.   C1 := Random(MaxColor) + 1;
  40.   C2 := Random(MaxColor) + 1;
  41.   C3 := Random(MaxColor) + 1;
  42.   C4 := Random(MaxColor) + 1;
  43.   ColorCount := (Random(5) + 1) * 3;
  44.  
  45. END;
  46.  
  47. PROCEDURE Initialize;
  48.  
  49. VAR
  50.   I: INTEGER;
  51.  
  52. BEGIN
  53.  
  54.   ClearScreen;
  55.   Randomize;
  56.   IF Graphics = 320 THEN
  57.     BEGIN
  58.       MaxX := 319;
  59.       MaxDelta := 7;
  60.     END
  61.   ELSE
  62.     BEGIN
  63.       MaxX := 639;
  64.       MaxDelta := 9;
  65.     END;
  66.   L := 1;
  67.   IncrementCount := 0;
  68.   StartX := MaxX Div 2;
  69.   StartY := MaxY Div 2;
  70.   FOR I := 1 TO Lines DO
  71.     BEGIN
  72.       LX1[I] := StartX;
  73.       LY1[I] := StartY;
  74.       LX2[I] := StartX;
  75.       LY2[I] := StartY;
  76.     END;
  77.    X1 := StartX;
  78.    Y1 := StartY;
  79.    X2 := StartX;
  80.    Y2 := StartY;
  81.    SelectNewColors;
  82.  
  83. END;
  84.  
  85. PROCEDURE CheckKey;
  86.  
  87. VAR
  88.   Ch : CHAR;
  89.  
  90. BEGIN
  91.  
  92.    Ch := #255;
  93.    IF KeyPressed THEN
  94.      Ch := ReadKey;
  95.    IF Ch = #27 THEN
  96.      BEGIN
  97.        Loop := False;
  98.        EndProgram := True;
  99.      END;
  100.    IF Ch = #00 THEN
  101.      BEGIN
  102.        Ch := ReadKey;
  103.        IF Ch = #59 THEN
  104.      WaitKey;
  105.        IF Ch = #60 THEN
  106.      Initialize;
  107.        IF (Ch = #68) AND (Tandy11 = True) THEN
  108.      BEGIN
  109.        IF Graphics = 320 THEN
  110.          BEGIN
  111.            Graphics := 640;
  112.            Loop := False;
  113.            HighGraphics;
  114.            Initialize;
  115.          END
  116.        ELSE
  117.          BEGIN
  118.            Graphics := 320;
  119.            Loop := False;
  120.            MediumGraphics;
  121.            Initialize;
  122.          END;
  123.      END;
  124.      END;
  125.  
  126. END;
  127.  
  128. PROCEDURE AdjustX1;
  129.  
  130. VAR
  131.   TestX1: INTEGER;
  132.  
  133. BEGIN
  134.  
  135.   TestX1 := DeltaX1 + X1;
  136.   IF (TestX1 < 1) OR (TestX1 > MaxX) THEN
  137.     BEGIN
  138.       TestX1 := X1;
  139.       DeltaX1 := -DeltaX1;
  140.     END;
  141.   X1 := TestX1;
  142.  
  143. END;
  144.  
  145. PROCEDURE AdjustY1;
  146.  
  147. VAR
  148.   TestY1: INTEGER;
  149.  
  150. BEGIN
  151.  
  152.   TestY1 := DeltaY1 + Y1;
  153.   IF (TestY1 < 1) OR (TestY1 > MaxY) THEN
  154.     BEGIN
  155.       TestY1 := Y1;
  156.       DeltaY1 := -DeltaY1;
  157.     END;
  158.   Y1 := TestY1;
  159.  
  160. END;
  161.  
  162. PROCEDURE AdjustX2;
  163.  
  164. VAR
  165.   TestX2: INTEGER;
  166.  
  167. BEGIN
  168.  
  169.   TestX2 := DeltaX2 + X2;
  170.   IF (TestX2 < 1) OR (TestX2 > MaxX) THEN
  171.     BEGIN
  172.       TestX2 := X2;
  173.       DeltaX2 := -DeltaX2;
  174.     END;
  175.   X2 := TestX2;
  176.  
  177. END;
  178.  
  179. PROCEDURE AdjustY2;
  180.  
  181. VAR
  182.   TestY2: INTEGER;
  183.  
  184. BEGIN
  185.  
  186.   TestY2 := DeltaY2 + Y2;
  187.   IF (TestY2 < 1) OR (TestY2 > MaxY) THEN
  188.     BEGIN
  189.       TestY2 := Y2;
  190.       DeltaY2 := -DeltaY2;
  191.     END;
  192.   Y2 := TestY2;
  193.  
  194. END;
  195.  
  196. PROCEDURE SelectNewDeltaValues;
  197.  
  198. BEGIN
  199.  
  200.   DeltaX1 := Random(MaxDelta) - (MaxDelta Div 2);
  201.   DeltaY1 := Random(MaxDelta) - (MaxDelta Div 2);
  202.   DeltaX2 := Random(MaxDelta) - (MaxDelta Div 2);
  203.   DeltaY2 := Random(MaxDelta) - (MaxDelta Div 2);
  204.   IncrementCount := (Random(4) + 1) * 2;
  205.  
  206. END;
  207.  
  208. PROCEDURE UpdateLine;
  209.  
  210. BEGIN
  211.  
  212.   Inc(L, 1);
  213.   IF L > Lines THEN
  214.     L := 1;
  215.   Dec(ColorCount, 1);
  216.   Dec(IncrementCount, 1);
  217.  
  218. END;
  219.  
  220. PROCEDURE DrawCurrentLine;
  221.  
  222. BEGIN
  223.  
  224.   ExtLineC(X1, Y1, X2, Y2, C1);
  225.   ExtLineC(MaxX - X1, Y1, MaxX - X2, Y2, C2);
  226.   ExtLineC(X1, MaxY - Y1, X2, MaxY - Y2, C3);
  227.   ExtLineC(MaxX - X1, MaxY - Y1, MaxX - X2, MaxY - Y2, C4);
  228.  
  229. END;
  230.  
  231. PROCEDURE EraseCurrentLine;
  232.  
  233. BEGIN
  234.  
  235.   ExtLineC(LX1[L], LY1[L], LX2[L], LY2[L], 0);
  236.   ExtLineC(MaxX - LX1[L], LY1[L], MaxX - LX2[L], LY2[L], 0);
  237.   ExtLineC(LX1[L], MaxY - LY1[L], LX2[L], MaxY - LY2[L], 0);
  238.   ExtLineC(MaxX - LX1[L], MaxY - LY1[L], MaxX - LX2[L], MaxY - LY2[L], 0);
  239.   LX1[L] := X1;
  240.   LY1[L] := Y1;
  241.   LX2[L] := X2;
  242.   LY2[L] := Y2;
  243.  
  244. END;
  245.  
  246. {Mainline}
  247. BEGIN
  248.  
  249.   Graphics := 320;
  250.   Loop := True;
  251.   EndProgram := False;
  252.   GetTandy11(Tandy11);
  253.   MediumGraphics;
  254.  
  255.   WHILE EndProgram = False DO
  256.     BEGIN
  257.       Initialize;
  258.       WHILE Loop = True DO
  259.     BEGIN
  260.       EraseCurrentLine;
  261.       IF ColorCount = 0 THEN
  262.         SelectNewColors;
  263.       IF IncrementCount = 0 THEN
  264.         SelectNewDeltaValues;
  265.       AdjustX1;
  266.       AdjustY1;
  267.       AdjustX2;
  268.       AdjustY2;
  269.       IF Random(5) = 3 THEN
  270.         BEGIN
  271.           X1 := (X1 + X2) Div 2;
  272.           Y2 := (Y1 + Y2) Div 2;
  273.         END;
  274.       DrawCurrentLine;
  275.       UpdateLine;
  276.       CheckKey;
  277.     END;
  278.       IF EndProgram = False THEN
  279.     Loop := True;
  280.     END;
  281.  
  282.   ExitGraphics;
  283.  
  284. END.
  285.